package cz.vse.javaee.album;

import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * <p/>
 * Created by IntelliJ IDEA.
 * User: zslajchrt
 * Date: Mar 15, 2010
 * Time: 3:17:43 PM
 */
public class PhotoServlet extends HttpServlet {

    @EJB(beanName = "AlbumDAOBean")
    private AlbumDAO albumDAO;

    @Override
    protected void doGet(HttpServletRequest request,
                         HttpServletResponse response)
            throws ServletException, IOException {

        // getPathInfo() vrací 'ocásek' URI, tj.
        // část, která následuje za částí, na kterou
        // je přilepen servlet.
        // Mapování: /photo/*
        // Extrakce: /photo/<nazevFotky> -> /<nazevFotky>
        String photoName = request.getPathInfo();
        if (photoName == null) {
            throw new ServletException("No photo specified");
        }
        // Odstraníme '/'
        photoName = photoName.substring(1);
        Photo photo;

        if ("".equals(photoName)) {
            // Není zadán název fotky, zkusíme tedy zjistit, zda
            // existuje kontextová fotka (otevřený detail fotky)
            AlbumPageBean albumBean =
                    (AlbumPageBean) request.getSession().getAttribute("albumBean");
            if (albumBean == null || albumBean.getDetailBean() == null ||
                    albumBean.getDetailBean().getPhoto() == null) {
                throw new ServletException("No context photo");
            }
            photo = albumBean.getDetailBean().getPhoto();
        } else {
            // Zadán název fotky. Pokusíme se jinalézt
            // přes DAO.
            try {
                String iconized = request.getParameter("iconized");
                if ("true".equalsIgnoreCase(iconized)) {
                    photo = albumDAO.findPhotoIcon(photoName);
                } else {
                    photo = albumDAO.findPhoto(photoName);
                }
            } catch (NoPhotoFoundException e) {
                throw new ServletException(e);
            }
        }

        // Fotografie se může měnit, proto ji nebudeme kešovat.
        response.setHeader("Cache-Control", "no-store");

        // Pošleme obrázek na klienta.
        byte[] image = photo.getImage();
        ServletOutputStream output = response.getOutputStream();
        output.write(image);
        output.flush();
    }
}
